package com.ray.util;

import java.util.ArrayList;
import java.util.Arrays;
import java.util.Collections;
import java.util.Comparator;
import java.util.HashMap;
import java.util.HashSet;
import java.util.List;
import java.util.Map;
import java.util.Set;
import java.util.regex.Matcher;
import java.util.regex.Pattern;
/**
 * 数组操作
 * @author Shensg
 * 2018年1月28日
 */
public class ArrayUtils {
	//删除指定下表的元素
	public static String[] delete(int index,String array[]){
        //根据删除索引，把数组后面的向前移一位
		String newArr[] = new String[((array.length-1)==0)?0:(array.length-1)]; 
        for(int i=0;i<array.length;i++){
            if(i>index) {
            	newArr[i-1]=array[i];
            }else if(i==index){
            	continue;
            }else{
            	newArr[i]=array[i];
            }
        }
        return newArr;
    }
	//数组类型的字符创转换为数组 --专用
	public static List<List<String[]>> arrayStrToArrayObj(String arrStr) {
		List<List<String[]>> retlist=new ArrayList<>();
		String[] arrStrArr = arrStr.split("-");
		for(int i=0;i<arrStrArr.length;i++) {
			List<String[]> list=new ArrayList<>();
			String arr=arrStrArr[i].substring(1, arrStrArr[i].length()-1);
			System.out.println(arr);
			Pattern p = Pattern.compile("(\\[[^\\]]*\\])");  
	        Matcher m = p.matcher(arr);  
	        while(m.find()){  
	            list.add(m.group().substring(1, m.group().length()-1).split(","));  
	        } 
	        retlist.add(list);
		}
		return retlist;
	}
	
	
    public static void main(String[] args) {  
       /*String arr[] = new String[10];
       for(int i=0;i<arr.length;i++) {
    	   arr[i]="str:"+i;
       }
       System.out.println(arr.length);
       String arr2[]=delete(3, arr) ;
       System.out.println(arr2.length);
       for(int i=0;i<arr.length;i++) {
    	   System.out.print(arr[i]);
       }*/
//    	String arr[] = new String[1];
//        for(int i=0;i<arr.length;i++) {
//     	   arr[i]="str:"+i;
//        }
//        System.out.println(arr.length);
//        String arr2[]=delete(0, arr) ;
//        System.out.println(arr2[0]);
    	/*System.out.println("[[1,2],[3,4,中国]]".substring(1, "[[1,2],[3,4,中国]]".length()-1));
       for (int i = 0; i < arrayStrToArrayObj("[['order_s_material_color','order_s_material_description'],['order_s_material_color','order_s_material_description','order_s_material_model'],['order_s_order_total'],['order_s_material_model'],['order_s_feed_total']]").size(); i++) {
		String[] arr = arrayStrToArrayObj("[['order_s_material_color','order_s_material_description'],['order_s_material_color','order_s_material_description','order_s_material_model'],['order_s_order_total'],['order_s_material_model'],['order_s_feed_total']]").get(i);
		for (int j = 0; j < arr.length; j++) {
			System.out.println(arr[j]);
		}
		System.out.println("____");
       }*/
        
      /*  List<String> lista = new ArrayList<String>();
        lista.add("a");
        lista.add("b");
       
    	List<String> listb = new ArrayList<String>();
    	  listb.add("b");
    	  listb.add("c");
    	  listb.add("d");
    	  listb.add("f");
    	  listb.add("g");
    	List<String> removeList = removeAll(lista,listb);
    	for(String str:removeList) {
    		System.out.println(str); 
    	}
    	*/
        
        List<Map<String, String>> list = new ArrayList<>();
        for(int i=0;i<6;i++) {
        	Map<String, String> map = new HashMap<>();
        	map.put("sort",i+"");
        	map.put("sorterr", "err"+i);
        	map.put("sorterr2", "err2"+i);
        	list.add(map);
        }
        Collections.sort(list, new Comparator<Map<String,String>>() {

			@Override
			public int compare(Map<String, String> o1, Map<String, String> o2) {
				// TODO Auto-generated method stub
				Integer i = Integer.valueOf(o1.get("sort").toString());
				Integer ii = Integer.valueOf(o2.get("sort").toString());
				return i.compareTo(ii);
			}
		});
        for(int i=0;i<list.size();i++) {
        	System.out.println(list.get(i).get("sort"));
        	System.out.println(list.get(i).get("sorterr"));
        	System.out.println(list.get(i).get("sorterr2"));
        	
        }
    }
    
    /**
     * 获取两个list的差集,单项
    * @date 2018年5月2日 上午8:10:27 
    * @author 李斌
    * @return List<E> 
    * @throws
     */
    public static  <E> List<E> subtract(List<E> list1,List<E> list2){
    	if(list1==null||list1.size()<1) {
    		return new ArrayList<E>();
    	}
    	if(list2==null||list2.size()<1) {
    		return new ArrayList<E>(list1);
    	}
    	List<E> lista = new ArrayList<E>(list1);
    	List<E> listb = new ArrayList<E>(list2);
    	lista.retainAll(listb); 
    	List<E> result =  new ArrayList<E>(lista);
    	return result;
    }
    
    /**
     * 获取两个list的交集,单项
    * @date 2018年5月2日 上午8:10:27 
    * @author 李斌
    * @return List<E> 
    * @throws
     */
    public static  <E> List<E> removeAll(List<E> list1,List<E> list2){
    	if(list1==null||list1.size()<1) {
    		return new ArrayList<E>();
    	}
    	if(list2==null||list2.size()<1) {
    		return new ArrayList<E>();
    	}
    	List<E> lista = new ArrayList<E>(list1);
    	List<E> listb = new ArrayList<E>(list2);
    	lista.removeAll(listb); 
    	List<E> result =  new ArrayList<E>(lista);
    	return result;
    }
    /**
     * 检查数组是否包含某个值的方法
     * @param arr
     * @param targetValue
     * @return
     */
    public static boolean useSetContains(String[] arr,String targetValue){
        Set<String> set=new HashSet<String>(Arrays.asList(arr));
        return set.contains(targetValue);
    }
    
  
}
